/*
 * Binance Spot WebSocket API
 *
 * OpenAPI Specifications for the Binance Spot WebSocket API
 *
 * API documents:
 * - [Github web-socket-api documentation file](https://github.com/binance/binance-spot-api-docs/blob/master/web-socket-api.md)
 * - [General API information for web-socket-api on website](https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/general-api-information)
 *
 *
 * The version of the OpenAPI document: 1.0.0
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

#![allow(unused_imports)]
use crate::spot::websocket_api::models;
use serde::{Deserialize, Deserializer, Serialize, de::Error};
use serde_json::Value;

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct AccountStatusResponseResult {
    #[serde(rename = "makerCommission", skip_serializing_if = "Option::is_none")]
    pub maker_commission: Option<i64>,
    #[serde(rename = "takerCommission", skip_serializing_if = "Option::is_none")]
    pub taker_commission: Option<i64>,
    #[serde(rename = "buyerCommission", skip_serializing_if = "Option::is_none")]
    pub buyer_commission: Option<i64>,
    #[serde(rename = "sellerCommission", skip_serializing_if = "Option::is_none")]
    pub seller_commission: Option<i64>,
    #[serde(rename = "canTrade", skip_serializing_if = "Option::is_none")]
    pub can_trade: Option<bool>,
    #[serde(rename = "canWithdraw", skip_serializing_if = "Option::is_none")]
    pub can_withdraw: Option<bool>,
    #[serde(rename = "canDeposit", skip_serializing_if = "Option::is_none")]
    pub can_deposit: Option<bool>,
    #[serde(rename = "commissionRates", skip_serializing_if = "Option::is_none")]
    pub commission_rates: Option<Box<models::AccountStatusResponseResultCommissionRates>>,
    #[serde(rename = "brokered", skip_serializing_if = "Option::is_none")]
    pub brokered: Option<bool>,
    #[serde(
        rename = "requireSelfTradePrevention",
        skip_serializing_if = "Option::is_none"
    )]
    pub require_self_trade_prevention: Option<bool>,
    #[serde(rename = "preventSor", skip_serializing_if = "Option::is_none")]
    pub prevent_sor: Option<bool>,
    #[serde(rename = "updateTime", skip_serializing_if = "Option::is_none")]
    pub update_time: Option<i64>,
    #[serde(rename = "accountType", skip_serializing_if = "Option::is_none")]
    pub account_type: Option<String>,
    #[serde(rename = "balances", skip_serializing_if = "Option::is_none")]
    pub balances: Option<Vec<models::AccountStatusResponseResultBalancesInner>>,
    #[serde(rename = "permissions", skip_serializing_if = "Option::is_none")]
    pub permissions: Option<Vec<String>>,
    #[serde(rename = "uid", skip_serializing_if = "Option::is_none")]
    pub uid: Option<i64>,
}

impl AccountStatusResponseResult {
    #[must_use]
    pub fn new() -> AccountStatusResponseResult {
        AccountStatusResponseResult {
            maker_commission: None,
            taker_commission: None,
            buyer_commission: None,
            seller_commission: None,
            can_trade: None,
            can_withdraw: None,
            can_deposit: None,
            commission_rates: None,
            brokered: None,
            require_self_trade_prevention: None,
            prevent_sor: None,
            update_time: None,
            account_type: None,
            balances: None,
            permissions: None,
            uid: None,
        }
    }
}
